#ifndef __M_UTIL_H__
#define __M_UTIL_H__
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <ctime>
#include <cassert>
#include <sys/stat.h>

// 获取系统时间
// 判断⽂件是否存在
// 获取⽂件的所在⽬录路径
// 创建⽬录

namespace mylog
{
    namespace util
    {
        class Date
        {
            public:
            static size_t now() { return (size_t)time(nullptr);}
        };

        class file {
            public:
                //exists 函数用于判断指定名称的文件是否存在
                static bool exists(const std::string &name) {     
                    struct stat st; 
                    return stat(name.c_str(), &st) == 0;    //使用 stat 函数获取文件的状态信息:如果 stat 函数返回值为 0，则表示文件存在
                }
                //path 函数用于获取给定文件名的目录路径
                static std::string path(const std::string &name) {
                    size_t pos = name.find_last_of("/\\");
                    if (pos == std::string::npos) return ".";  //a.txt
                    return name.substr(0, pos + 1);  //pos+1是为了把/\\包含进来
                }
                static void create_directory(const std::string &path) { 
                    size_t pos, idx = 0;
                    while(idx < path.size()) {
                        pos = path.find_first_of("/\\", idx); //从idx开始找
                        if (pos == std::string::npos) {  //  eg. aaa
                            mkdir(path.c_str(), 0755);
                            return;
                        }
                        std::string subdir = path.substr(0, pos+1);
                        if (exists(subdir)) {idx = pos + 1; continue;}
                        mkdir(subdir.c_str(), 0755);
                        idx = pos + 1;
                    }
                }
        };

    }
}
#endif